package com.sky.context;

public class BaseContext {

    /**
     * 关于ThreadLocal的内容，其底层是在线程中维护单独的ThreadLocalMap特殊的HashMap集合，
     * 其键是ThreadLocal变量，关键的内容是ThreadLocalMap中key是弱引用，Value是强引用，
     *为什么将ThreadLocal设为弱引用？因为若设为强引用，则即使设置其为null，因为ThreadLocalMap的key依然对其强引用
     * 就无法回收。会造成内存泄露。
     *
     *
     * 无论强引用或者弱引用，所描述的都是对象。
     *
     * 弱引用和强引用的GC对比
     * 弱引用会在下一次GC时，若对象仅有若应用指向，则会被强制回收
     * 弱引用需要声明为弱引用类型的对象。
     * 强引用是不声明为弱引用的对象，强引用对象仅当被显示设为null或者超出作用域范围时被回收——局部变量方法执行完毕。
     */


    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    public static Long getCurrentId() {
        return threadLocal.get();
    }

    public static void removeCurrentId() {
        threadLocal.remove();
    }

}
